home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Science / MAL ©P.f.Howden 1⁄1⁄89 / MICROOTS < prev    next >
Text File  |  1991-12-02  |  6KB  |  86 lines

  1. 1 CLS :CLEAR:PRINT"MICROOTS-Solves SINGLE or SYSTEMS of NON/LINEAR EQUATIONS." : PRINT "For ROOTS or POLES of SINGLE EQU. use LINE 1000  F=X^2-4"
  2. 2 PRINT"POLES(INFINITIES) will yield large  F  RESIDUALS.":PRINT:DEFDBL A-F,H,Q,V-Z
  3. 3 PRINT "FOR SIMULTANEOUS EQUATIONS," : PRINT "Type your EQUATIONS on lines 10-45 as follows:"
  4. 4 PRINT "10 F(0)=2*X(0)-3*X(1)-17 : RETURN":PRINT "11 F(1)=X(0)+X(1)-1 : RETURN":PRINT
  5. 7 PRINT "PRESS SPACE BAR TO CONTINUE" : PRINT "OR <BREAK> TO ENTER EQUATION"
  6. 8 A$=INKEY$ : IF A$<>" " THEN 8
  7. 9 GOTO 100
  8. 10 F(0)=2*X(0)-3*X(1)-17: RETURN
  9. 11 F(1)=X(0)+X(1)-1 : RETURN
  10. 100 DEF FNS(X)=LOG(ABS(X)+SQR(X*X+1))
  11. 140 INPUT "NUMBER OF EQUATIONS";N:NN=N:N=N-1:INPUT "ACCUR D(.00001?)=";D:IF N=0 THEN 970
  12. 143 PRINT"SIMICROOTS:If iterations are diverging,PRESS SPACE BAR.":PRINT
  13. 145 INPUT "PRESET CONSTANTS in EQUATIONS? (Y/N)" ; T$ : IF LEFT$(T$,1)="Y" THEN INPUT "HOW MANY" ; G : DIM G(G) : FOR I=0 TO G-1 : PRINT "G(" ; I ; ")=" ; : INPUT G(I) : NEXT I
  14. 150 DIM F(NN),X(NN),P(NN),S1(NN),H(NN),X1(NN),S(NN),S2(NN),X2(NN),R1(NN),A(NN),R(NN),A1(NN)
  15. 155 INPUT "SET MAXIMUM NUMBER of ITERATIONS M(200?)=" ;M
  16. 170 FOR I=0 TO N : PRINT " STARTING X(" ; I ; ")  (frequently  0 or ±1)=" ; : INPUT X(I) : X2(I)=X(I) : NEXT I
  17. 180 FOR I=0 TO N : PRINT "R(" ; I ; ")  (usually 0, but 5 or more if hard to converge)=" ; : INPUT R(I) : R1(I)=R(I) : NEXT I:INPUT "GAIN (usually 1,less if hard to converge,eg .3,.1)=";U
  18. 190 FOR I=0 TO N : S1(I)=1 : P(I)=0 : A(I)=I : A1(I)=I : NEXT I
  19. 200 K1=0 : K2=0 
  20. 220 INPUT "RE-ARRANGE  EQUATIONS? (Y/N)" ; T$ : IF LEFT$(T$,1)="N" THEN GOTO 250
  21. 240 PRINT "ENTER EQUATION SEQUENCE:" : PRINT : PRINT "ORIGINAL F( ) ","NEW SEQUENCE" : FOR I=0 TO N : PRINT I,: INPUT A(I) : NEXT I
  22. 250 INPUT "SIGN SEARCH? (Y/N)" ; T$ : IF LEFT$(T$,1)="Y" THEN GOSUB 600 : GOTO 240
  23. 270 FOR I=0 TO N : PRINT "SIGN F(" ; I ; ")  (-1 or 1)=" ; : INPUT S(I) : NEXT I : FOR I2=0 TO N : I=A(I2) : X(I)=X2(I) : R(I)=R1(I2) : S1(I)=1 : P(I)=0  : NEXT I2 : GOSUB 300 : IF N=0 THEN GOTO 270
  24. 275 GOTO 220
  25. 300 PRINT : PRINT : PRINT " SIGN COMB." ;
  26. 305 FOR I=0 TO N : PRINT TAB(3*I+12) ; S(I) ; : NEXT I : PRINT
  27. 310 PRINT : PRINT "EQU.SEQU." ;
  28. 315 FOR I=0 TO N : PRINT TAB(3*I+12) ; A(I) ; : NEXT I : PRINT
  29. 320 PRINT : PRINT "STEP" ; TAB(11) ; "P" ; TAB(18) ; "R" ; TAB(28) ; " X ITERATION" : PRINT
  30. 325 FOR K=1 TO M : L1=-1
  31. 326 FOR I2=0 TO N : I=A(I2) : I1=A1(I2)
  32. 330 J=I+1 : ON J GOSUB 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45
  33. 333 IF ABS(X(I1))>1000000! OR ABS(F(I))>1E+18 THEN PRINT "X OR F ABOVE LIMIT SET IN LINE 333" : K=M : Q=1 : GOTO 495
  34. 335 H(I)=S(I)*FNS(F(I))*SGN(F(I)) : S2(I)=SGN(H(I))
  35. 340 IF K1=1 THEN GOSUB 505 : IF K1=1 THEN GOSUB 10 : GOTO 335
  36. 345 IF S2(I)*S1(I)> 0 THEN P(I)=P(I)+U: R(I)=R(I)-U
  37. 400 R(I)=R(I)+U : X1(I1)=X(I1)+H(I)*2^(P(I)/3-R(I)-1/3)
  38. 405 PRINT K ; TAB(10) ; P(I) ; TAB(17) ; R(I) ; TAB(27) ; X1(I1)
  39. 410 IF ABS(X1(I1)-X(I1))<D THEN L1=L1+1
  40. 415 X(I1)=X1(I1) : S1(I)=S2(I)
  41. 416 NEXT I2 : IF L1<>N THEN GOTO 485
  42. 420 PRINT : PRINT "SOLUTIONS" ; TAB(31) ; " RESIDUAL" : PRINT
  43. 425 FOR I3=0 TO N : I=A1(I3) : I1=A(I3)
  44. 430 PRINT "X" ; I ; "=" ; X1(I) ; TAB(30) ; "F" ; I ; "=" ;
  45. 435 IF L1=N THEN J=I+1 : ON J GOSUB 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45
  46. 440 PRINT F(I)
  47. 445 NEXT I3
  48. 450 PRINT : PRINT "SIGN COMB." ;
  49. 455 FOR I=0 TO N : PRINT TAB(3*I+12) ; S(I) ; : NEXT I
  50. 460 PRINT : PRINT "EQU.SEQU." ;
  51. 465 FOR I=0 TO N : PRINT TAB(3*I+12) ; A(I) ; : NEXT I : PRINT
  52. 470 INPUT"TO CONT,PRESS RETURN";C$
  53. 480 PRINT : K=M : Q=0 : GOTO 495
  54. 485 A$=INKEY$ : IF A$<>"" THEN K=M : Q=1 : GOTO 495
  55. 490 Q=2
  56. 495 PRINT : NEXT K
  57. 496 IF Q<>2  THEN RETURN
  58. 500 PRINT "NOT CONVERGING IN " ; M ; " ITERATIONS"
  59. 501 PRINT : PRINT "SIGN COMB" ;
  60. 502 FOR I=0 TO N : PRINT TAB(3*I+12) ; S(I) ; : NEXT I
  61. 503 PRINT : PRINT "EQU. SEQU." ;
  62. 504 FOR I=0 TO N : PRINT TAB(3*I+12) ; A(I) ; : NEXT I : PRINT :INPUT "To find more possible solutions,PRESS RETURN";C$:RETURN
  63. 505 IF K2=1 THEN K2=0 : S1(I)=S2(I) : GOTO 515
  64. 510 PRINT F(I); TAB(25) ; X(I) : IF S1(I)*S2(I)<0 THEN K1=0 : PRINT : PRINT "ITER" ; TAB(11) ; "P" ; TAB(18) ; "R" ; TAB(28) ; "ROOT" : PRINT : PRINT : RETURN
  65. 515 X(I)=X(I)+L : RETURN
  66. 600 T1=2^NN-1 : FOR T2=0 TO T1 : T5=T2 : FOR I2=0 TO N : I=A(I2) : X(I)=X2(I) : R(I)=R1(I2) : S1(I)=1 : P(I)=0 : NEXT I2
  67. 610 FOR I=N TO O STEP -1 : T3=T5/2 : T4=INT(T3) : IF T3-T4<.001 THEN S(I)=-1 : GOTO 630
  68. 620 S(I)=1
  69. 630 T5=T4 : NEXT I : GOSUB 300 : NEXT T2
  70. 640 PRINT : PRINT "ALL SIGN COMBINATIONS EXHAUSTED" : INPUT "RE-ARRANGE EQUATIONS? (Y/N)" ; T$ : IF LEFT$(T$,1)="N" THEN PRINT : INPUT "END OF PROGRAM,PRESS RETURN";C$:END
  71. 650 RETURN
  72. "====================================
  73. 970 DEFDBL A-Z:PRINT"MICROOTSEARCH for SINGLE EQUATIONS:":INPUT "STARTING X=";X:INPUT "R (usually 0,but 5 or more if hard to converge)=";R1:INPUT "SIGN(-1 or 1)=";S
  74. 980 INPUT "SEARCH INCREMENT (try .03,but non-search solving if zero)=";L2:INPUT "PRESET equation CONSTANT G(if any)=";G:PRINT
  75. 990 PRINT"SEARCH/X" TAB(25) "FUNCTION VALUE,F":P=0:S1=1:R=R1:L=L2:L1=0
  76. 1000 PI=3.141592#:F=(PI*SIN(5*X)/8-EXP(PI*SQR(X+1)/8)+SQR(X+PI*5/8))*SQR(1+PI*(X-1)^2/8)/((EXP(-1*X*X)-PI/4)*(1+PI*(X+1)^2/8))+PI/8
  77. 1010 IF L=0 THEN 1040
  78. 1020 IF L1=0 THEN L1=1:S3=SGN(F)
  79. 1030 S4=SGN(F):PRINT  X TAB(25) F:IF S3*S4>0 THEN X=X+L:GOTO 1000
  80. 1040 L=0:Q=S*LOG(ABS(F)+1)*SGN(F):S2=SGN(Q):IF S1*S2>0 THEN P=P+1:R=R-1
  81. 1050 R=R+1:X1=X+Q*2^(P/3-R):PRINT X1:IF ABS(X1-X)<D THEN PRINT"SOLUTION Xo= ";X;:PRINT"  ;RESIDUAL F=";F:INPUT "PRESS RETURN for more possible solutions";C$:GOTO 1070
  82. 1060 X=X1:S1=S2:GOTO 1000
  83. 1070 IF L2=0 THEN 970
  84. 1080 S=-1*S:X=X1+100*D*SGN(L2):PRINT:GOTO 990
  85.          MACINTOSH LISTING
  86.